/*
 * Message.h
 *
 *  Created on: 14/06/2014
 *      Author: javier
 */

#ifndef MESSAGE_H_
#define MESSAGE_H_

#include <vector>
#include <string>

enum EventMessage {
	// Eventos enviados por el cliente
	BM_MOVE_LEFT,
	BM_MOVE_RIGHT,
	BM_MOVE_UP,
	BM_MOVE_DOWN,
	DROP_BOMB,
	GET_CAMPAIGNS,
	SELECT_CAMPAIGN,
	START_MATCH,
	JOIN_MATCH,
	START_JOIN_MATCH,
	LOAD_NEXT_SCENARIO,
	NEW_GAME, // Le indica al servidor que deje de escuchar eventos y comience de vuelta la seleccion de campania o partida
	// Eventos enviados por el servidor
	UPDATE, // nueva posicion
	NEW, // Nuevo objeto
	DELETE, // eliminacion de un objeto, explosion de una bomba
	END_MATCH, // Indica el fin del nivel actual, para que el cliente cargue y notifique al usuario el nuevo nivel
	END_CAMPAIGN, // indica el fin de la campania
	SCORES, // actualizacion de los puntajes, lleva como argumento un string separado por comas de puntajes
	NEW_PLAYER_ID, // Le informa al cliente el id de su bomberman, asi puede mover la camara
	// De uso general
	OK,
	ERROR,
	// Evento de control para terminar el thread que quedo
	// bloqueado esperando un evento
	TERMINATE,
	NOOP
};

class Message {
public:
	EventMessage code;
	std::vector<std::string> args;
	std::vector<bool> flags;
	Message();
	~Message();
	Message(const Message& o);
	Message& operator=(const Message& o);
	std::string toString();
	void initFromString(std::string repr);
	int id;
};

#endif /* MESSAGE_H_ */
